Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support saving chat history in gr.ChatInterface #10191

Merged
merged 85 commits into from
Jan 4, 2025
Merged

Support saving chat history in gr.ChatInterface #10191

merged 85 commits into from
Jan 4, 2025

Conversation

abidlabs
Copy link
Member

@abidlabs abidlabs commented Dec 13, 2024

Test with: demo/chatinterface_save_history/run.py

Closes: #10045

@abidlabs abidlabs marked this pull request as draft December 13, 2024 00:40
@gradio-pr-bot
Copy link
Collaborator

gradio-pr-bot commented Dec 13, 2024

🪼 branch checks and previews

Name Status URL
Spaces ready! Spaces preview
Website ready! Website preview
Storybook ready! Storybook preview
🦄 Changes detecting...

Install Gradio from this PR

pip install https://gradio-pypi-previews.s3.amazonaws.com/f136fece1af912a4802e3acbf82c84b9eb554ff8/gradio-5.9.1-py3-none-any.whl

Install Gradio Python Client from this PR

pip install "gradio-client @ git+https://github.com/gradio-app/gradio@f136fece1af912a4802e3acbf82c84b9eb554ff8#subdirectory=client/python"

Install Gradio JS Client from this PR

npm install https://gradio-npm-previews.s3.amazonaws.com/f136fece1af912a4802e3acbf82c84b9eb554ff8/gradio-client-1.8.0.tgz

Use Lite from this PR

<script type="module" src="https://gradio-lite-previews.s3.amazonaws.com/f136fece1af912a4802e3acbf82c84b9eb554ff8/dist/lite.js""></script>

@gradio-pr-bot
Copy link
Collaborator

gradio-pr-bot commented Dec 13, 2024

🦄 change detected

This Pull Request includes changes to the following packages.

Package Version
@gradio/button minor
@gradio/chatbot minor
@gradio/dataset minor
@gradio/downloadbutton minor
@gradio/textbox minor
@gradio/uploadbutton minor
gradio minor
  • Maintainers can select this checkbox to manually select packages to update.

With the following changelog entry.

Support saving chat history in gr.ChatInterface

Maintainers or the PR author can modify the PR title to modify this entry.

Something isn't right?

  • Maintainers can change the version label to modify the version bump.
  • If the bot has failed to detect any changes, or if this pull request needs to update multiple packages to different versions or requires a more comprehensive changelog entry, maintainers can update the changelog file directly.

@dawoodkhan82
Copy link
Collaborator

@abidlabs I'll replace gr.State() here with gr.BrowserState(), and update the styling of the html "sidebar". Is that what you had in mind?

@abidlabs
Copy link
Member Author

Yes exactly. We also need to actually save the chat history to the browser state, that functionality is currently not implemented

@abidlabs
Copy link
Member Author

You may find this PR useful: #10245 (or maybe not, not sure)

abidlabs and others added 5 commits December 23, 2024 16:58
* Declare exports

* add changeset

* type fixes

* more type fixes

* add changeset

* notebooks

* changes

---------

Co-authored-by: gradio-pr-bot <[email protected]>
Co-authored-by: Freddy Boulton <[email protected]>
Co-authored-by: Abubakar Abid <[email protected]>
* changes

* changes

* add changeset

* format

* changes

---------

Co-authored-by: gradio-pr-bot <[email protected]>
@dawoodkhan82
Copy link
Collaborator

@abidlabs Did a first pass, and the functionality for chat conversation history should work, if you can test. Will push some changes to tweak the UI.

@abidlabs
Copy link
Member Author

Will take a look soon!

@abidlabs
Copy link
Member Author

Nice @dawoodkhan82! Core functionality to save to browser state is working for me and I like that the first message automatically becomes the title of the saved first chat. Some issues I noticed:

(1) Clicking on the trash button in Chatbot causes the history to error out. And in a permanent way: if you refresh the page, you'll see that none of the chats in the history remain and you actually need to restart the Gradio server to get the chat history working again:

Screen.Recording.2024-12-26.at.11.26.28.PM.mov

(2) Uploading an image breaks the chat history feature as well:

Screen.Recording.2024-12-26.at.11.27.45.PM.mov

(3) When you load the chat from the history, its not synchronized with the chat state, so that if you send a subsequent message, it wipes out the chat history instead of "resuming" from the last message:

Screen.Recording.2024-12-26.at.11.29.40.PM.mov

(4) Also, the final chat that is stored to history seems to be used as the value for all of the chats. So if you click through the chats, all of them will have the same value actually:

Screen.Recording.2024-12-26.at.11.31.17.PM.mov

@abidlabs
Copy link
Member Author

Fixed isseus (3) and (4), working on the others

@abidlabs
Copy link
Member Author

There are some edge cases I need to fix (e.g. handling images and other non-text messages) but let me open for feedback, especially on the design side

Copy link
Collaborator

@dawoodkhan82 dawoodkhan82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested and lgtm!
Small nit: The plus icon in chat history is black in dark mode. I tried fixing it but it seems like we have to change the styling in the Button component, which might cause other issues

@aliabid94
Copy link
Collaborator

Small nit: The plus icon in chat history is black in dark mode. I tried fixing it but it seems like we have to change the styling in the Button component, which might cause other issues

stroke="currentColor" might fix, e.g. https://github.com/gradio-app/gradio/blob/main/js/icons/src/Erase.svelte#L11

@dawoodkhan82
Copy link
Collaborator

dawoodkhan82 commented Jan 2, 2025

@aliabid94 Button.svelte uses <img> tags for icons which doesn't inherit "currentColor". Can change the Button.svelte implementation to use <svg> for icons, but that might have unintended effects.

@abidlabs
Copy link
Member Author

abidlabs commented Jan 3, 2025

Small nit: The plus icon in chat history is black in dark mode. I tried fixing it but it seems like we have to change the styling in the Button component, which might cause other issues

Ah good catch, I wonder if we can change it to gray or something

@abidlabs
Copy link
Member Author

abidlabs commented Jan 3, 2025

Pushed up some changes (just docs/guides)

@hannahblair
Copy link
Collaborator

Looks good! Only thing is the icon as discussed above. It'd be nice if the spacing in dataframe was slightly cleaner and maybe adding word-break to prevent horizontal scrolling but I gave it a go myself and it's definitely too fiddly and non-blocking for now I think.

Screenshot 2025-01-03 at 18 57 16

@abidlabs
Copy link
Member Author

abidlabs commented Jan 4, 2025

Thanks folks! I have updated the icon to a shape and color that looks good in dark and light mode:

image image

Will merge this in once CI runs. Thanks @dawoodkhan82 @aliabid94 @hannahblair!

@abidlabs abidlabs enabled auto-merge (squash) January 4, 2025 17:34
@abidlabs abidlabs merged commit 5ce2832 into main Jan 4, 2025
23 checks passed
@abidlabs abidlabs deleted the chat-history branch January 4, 2025 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Feature request: Allow conversation retention & multiple conversations in gr.ChatInterface
6 participants